package com.omp.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
	private static Calendar calendar = null;// 日期时间对象
	private static SimpleDateFormat format = null;
	private static Date date = null;

	public static final String DATE_PATTERN = "yyyy-MM-dd";// 日期格式
	public static final String TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";// 时间格式

	private static final String MONTH_OF_FIRST_QUARTER = "123";// 第一季度包含的月份
	private static final String MONTH_OF_SECOND_QUARTER = "456";// 第二季度包含的月份
	private static final String MONTH_OF_THIRD_QUARTER = "789";// 第三季度包含的月份

	private static final String FIRST_QUARTER = "1";// 第一季度
	private static final String SECOND_QUARTER = "2";// 第二季度
	private static final String THIRD_QUARTER = "3";// 第三季度
	private static final String FOURTH_QUARTER = "4";// 第四季度

	// 第一次使用此类时，实例化日期时间对象
	static {
		calendar = Calendar.getInstance();
		format = new SimpleDateFormat();
	}

	/**
	 * 私有构造函数，防止实例化此类
	 */
	private DateUtil() {

	}

	/**
	 * 取得当前时间，格式为yyyy-MM-dd HH:mm:ss
	 * @return String 当前时间
	 */
	public static String getCurrentTime() {
		return getCurrentTimeUsePattern(TIME_PATTERN);
	}

	/**
	 * 取得当前日期，格式为yyyy-MM-dd
	 * @return String 当前日期
	 */
	public static String getCurrentDate() {
		syncToSystemTime();
		return getCurrentTimeUsePattern(DATE_PATTERN);
	}

	/**
	 * 根据传入的格式返回相应日期对象
	 * @param String pattern 日期格式
	 * @return String 格式化后的当前时间字符串
	 */
	public static String getCurrentTimeUsePattern(String pattern) {
		syncToSystemTime();
		return format(pattern);
	}

	/**
	 * 格式化时间
	 * @param String time 时间
	 * @param String pattern 格式
	 * @return String 格式化后的时间
	 * @throws ParseException
	 */
	public static String format(String time, String pattern) throws ParseException {
		format.applyPattern(pattern);
		calendar.setTime(format.parse(time));
		return format(pattern);
	}

	/**
	 * 格式化时间
	 * @param Date time 时间
	 * @param String pattern 格式
	 * @return String 格式化后的时间
	 */
	public static String format(Date time, String pattern) {
		calendar.setTime(time);
		return format(pattern);
	}

	/**
	 * 格式化calendar时间并返回
	 * @param String pattern 日期时间格式
	 * @return String 格式化后的日期时间
	 */
	private static String format(String pattern) {
		date = calendar.getTime();
		format.applyPattern(pattern);
		return format.format(date);
	}

	/**
	 * 返回当前系统时间的年
	 * @return String 返回当前系统时间的年
	 */
	public static String getCurrentYear() {
		syncToSystemTime();
		return "" + calendar.get(Calendar.YEAR);
	}

	/**
	 * 返回当前系统时间的季度
	 * @return String 返回当前系统时间的季度
	 */
	public static String getCurrentQuarter() {
		String currentMonth = getCurrentMonth();
		if (MONTH_OF_FIRST_QUARTER.indexOf(currentMonth) != -1)
			return FIRST_QUARTER;
		else if (MONTH_OF_SECOND_QUARTER.indexOf(currentMonth) != -1)
			return SECOND_QUARTER;
		else if (MONTH_OF_THIRD_QUARTER.indexOf(currentMonth) != -1)
			return THIRD_QUARTER;
		else
			return FOURTH_QUARTER;
	}

	/**
	 * 返回当前系统时间的月份
	 * @return String 返回当前系统时间的月份
	 */
	public static String getCurrentMonth() {
		syncToSystemTime();
		return "" + (calendar.get(Calendar.MONTH) + 1);
	}

	/**
	 * 同步到当前系统时间
	 */
	private static void syncToSystemTime() {
		calendar.setTimeInMillis(System.currentTimeMillis());
	}
}
